package ar.com.freesales.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

/**+
 * Implementacion de un dao generico
 * @author chino
 *
 */
@Repository(value="genericDao")
@SuppressWarnings("unchecked")
public class GenericDao extends HibernateDaoSupport{

	@Autowired
	public GenericDao(@Qualifier("freesalesHibernateTemplate") HibernateTemplate hibernateTemplate) {
		this.setHibernateTemplate(hibernateTemplate);
	}
	
	public void delete(Object entidad) {
		this.getHibernateTemplate().delete(entidad);
	}

	public Serializable save(Object entidad) {
		return this.getHibernateTemplate().save(entidad);
		
	}
	public void update(Object entidad) {
		this.getHibernateTemplate().update(entidad);
	}

	public <T> T get(Class<T> clazz, Long id) {
		return (T)this.getHibernateTemplate().get(clazz, id);
	}

	public <T> List<T> getAll(Class<T> clazz) {
		return this.getHibernateTemplate().loadAll(clazz);
	}

	public void saveOrUpdate(Object entidad) {
		this.getHibernateTemplate().saveOrUpdate(entidad);
	}
	
	public <T> List<T> findAll(Class<T> clazz) {
		return getHibernateTemplate().findByCriteria(DetachedCriteria.forClass(clazz));
	}
	
}
